package modulos.usuario.modelo;

import basedatos.UsuarioBD;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import modelo.Persona;
import modulos.agenda.modelo.Contacto;
import modulos.certificado.modelo.Certificado;
import modulos.consulta.modelo.Consulta;
import modulos.consulta.modelo.ConsultaVisualizar;
import modulos.enfymed.modelo.MedicamentoComercial;
import modulos.enfymed.modelo.MedicamentoGenerico;
import modulos.enfymed.modelo.Patologia;
import modulos.nota.modelo.Nota;
import modulos.recordatorio.modelo.Recordatorio;
import modulos.reservacion.modelo.Reservacion;
import modulos.reservacion.modelo.Reservacion_Config;
import modulos.reservacion.modelo.Servicio;

@Entity
public class Usuario extends Persona implements Serializable{
   
   private String cedula;    
   private String especialidad;    
   private String estudios;    
   private String actividad;
   private String genero;
   @OneToOne
   @JoinColumn(name="idCuenta")
   private Cuenta_Usuario cuentaUsr;
    @OneToMany(mappedBy = "usuario", cascade= CascadeType.ALL)
   private List<Contacto> contactos=new ArrayList<Contacto>();
    @OneToMany(mappedBy = "usuario", cascade= CascadeType.ALL)
    private List<Consulta> consultas=new ArrayList<Consulta>();
    @OneToOne(mappedBy = "usuario", cascade= CascadeType.ALL)
    private Reservacion_Config reservacion_Config;
    @OneToMany(mappedBy = "usuario", cascade = CascadeType.ALL)
    private List<Servicio> servicioss;
    @OneToMany(mappedBy = "usuario", cascade = CascadeType.ALL)
    private List<Reservacion> reservacions;
    @OneToMany(mappedBy = "usuario", cascade = CascadeType.ALL)
    private List<ConsultaVisualizar> consultaVisualizars;
    @OneToOne(mappedBy = "usuario", cascade = CascadeType.ALL)
    private Permiso permisos;
    @OneToMany(mappedBy = "usuario", cascade= CascadeType.ALL)
    private List<Nota>notas;
    @OneToMany(mappedBy = "usuario" , cascade= CascadeType.ALL)
    private List<MedicamentoGenerico>medicGenericos;
    @OneToMany(mappedBy = "usuario" , cascade= CascadeType.ALL)
    private List<MedicamentoComercial>medicComerciales;
    @OneToMany(mappedBy = "usuario" , cascade= CascadeType.ALL)
    private List<Patologia>patologias;
    @OneToMany(mappedBy = "usuario", cascade= CascadeType.ALL)
    private List<Certificado> certificados;
    @OneToMany(mappedBy = "usuario",cascade= CascadeType.ALL)
    private List<Recordatorio> recordatorios;
   
   public Usuario() 
   {
       genero="";
       especialidad="";
       
   }

    public String getCedula() {
        return cedula;
    }

    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    public String getEspecialidad() {
        return especialidad;
    }

    public void setEspecialidad(String especialidad) {
        this.especialidad = especialidad;
    }

    public String getEstudios() {
        return estudios;
    }

    public void setEstudios(String estudios) {
        this.estudios = estudios;
    }

    public String getActividad() {
        return actividad;
    }

    public void setActividad(String actividad) {
        this.actividad = actividad;
    }

    public Cuenta_Usuario getCuentaUsr() {
        return cuentaUsr;
    }

    public void setCuentaUsr(Cuenta_Usuario cuentaUsr) {
        this.cuentaUsr = cuentaUsr;
    }

    public List selectAllUsuarios() throws Exception {
        UsuarioBD ubd = new UsuarioBD();
        List lsUsr;

        String cmdSql = "Select u From Usuario u";
        lsUsr = ubd.selectAllUsuarios(cmdSql);
        if (!lsUsr.isEmpty()) {
            return lsUsr;
        }
        return null;
    }

    public List selectAtibutosGalenos() throws Exception {
        UsuarioBD ubd = new UsuarioBD();
        List lsUsr;

        String cmdSql = "Select u.idPersona, u.nombre, u.apellido, u.especialidad From Usuario u";
        lsUsr = ubd.selectAllUsuarios(cmdSql);
        if (!lsUsr.isEmpty()) {
            return lsUsr;
        }
        return null;
    }

    public String toString() {
        String s = "";
        if (getEspecialidad() != null) {
            s += getEspecialidad() + ": ";
        }
        s += getNombre() + " " + getApellido();
        return s;
    }

    /**
     * @return the genero
     */
    public String getMedico()
    {
        return getNombre()+" "+getApellido();
    }    
    public String getGenero() {
        return genero;
    }

    /**
     * @param genero the genero to set
     */
    public void setGenero(String genero) {
        this.genero = genero;
    }
    
}//cls
